package com.leetcode.hash;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

//字母异位词分组
public class lc_49 {
    public static void main(String[] args) {
        String[] strs = {"eat", "tea", "tan", "ate", "nat", "bat"};
        for (List<String> list : groupAnagrams(strs)){
            System.out.println(list);
        }

    }

    public static List<List<String>> groupAnagrams(String[] strs) {
        if(strs == null||strs.length == 0){
            return new ArrayList<>();
        }
        //思路: 将异位词根据字母排序后作为key,value存放分组后的字符串
        HashMap<String, List<String>> map = new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            //1.对每一个传入的字符串进行排序
            char[] chars = strs[i].toCharArray();
            Arrays.sort(chars);
            String sortedStr = new String(chars);
            //2.查找map中是否存在这样的key,如果不存在,直接开辟一个
            if (!map.containsKey(sortedStr)) {
                map.put(sortedStr, new ArrayList<>());
            }
            //3.如果存在,直接放入对应的key中
            map.get(sortedStr).add(strs[i]);
        }
        return new ArrayList<>(map.values());
    }
}
